home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
dsp
/
dr.bub
/
96000.lha
/
96000
/
master2.asm
< prev
next >
Wrap
Assembly Source File
|
1992-04-28
|
10KB
|
188 lines
page 132,65,3,3
; opt CC
;********************************************************
;* Motorola Austin DSP Operation 10 April 1991 *
;* *
;* COPYRIGHT (C) BY MOTOROLA INC, ALL RIGHTS RESERVED *
;* *
;* ALTHOUGH THE INFORMATION CONTAINED HEREIN, *
;* AS WELL AS ANY INFORMATION PROVIDED RELATIVE *
;* THERETO, HAS BEEN CAREFULLY REVIEWED AND IS *
;* BELIEVED ACCURATE, MOTOROLA ASSUMES NO *
;* LIABILITY ARISING OUT OF ITS APPLICATION OR *
;* USE, NEITHER DOES IT CONVEY ANY LICENSE UNDER *
;* ITS PATENT RIGHTS NOR THE RIGHTS OF OTHERS. *
;* *
;********************************************************
;****************************************************************************
; master2.asm - demo code for DSP96002 multi-device simulation
;
; 9 April 91: Roman Robles - polish for 4 dev. sim.
;
; relavant topology for this simulation:
;
; B A B A
; ----------+ +----------+ +-----------
; Upstream | | Master | | Slave
; DSP96002 |=====> | DSP96002 |=====> | DSP96002
; __________|(PIO) |__________| (DMA) |___________
;
;****************************************************************************
; Equates Section
;****************************************************************************
RESET equ $00000000 ; reset isr
DMA0 equ $00000010 ; DMA channel 0 isr
MAIN equ $00000200 ; main routine
IPR equ $FFFFFFFF ; interrupt priority reg
BCRA equ $FFFFFFFE ; port a bus control reg
BCRB equ $FFFFFFFD ; port b bus control reg
PSR equ $FFFFFFFC ; port select reg
;****************************************************************************
; Addresses of Host's DMA Channel 0 Registers
;****************************************************************************
DMA0SAR equ $FFFFFFDE ; DMA ch 0 source address reg
DMA0SOR equ $FFFFFFDD ; DMA ch 0 source offset reg
DMA0CR equ $FFFFFFDC ; DMA ch 0 counter reg
DMA0DAR equ $FFFFFFDA ; DMA ch 0 destination address reg
DMA0CSR equ $FFFFFFD8 ; DMA ch 0 control/status reg
;****************************************************************************
; Addresses of Slave's Port A Host Interface Registers
;****************************************************************************
SLAVEADDR equ $FFFFFFC0 ; base address of slave host port reg
XMR equ SLAVEADDR+$C ; direct address X memory read
HICSR equ SLAVEADDR+$20 ; slave host int control/status reg
RX equ SLAVEADDR+$28 ; receive reg
TX equ SLAVEADDR+$28 ; transmit reg
CVR equ SLAVEADDR+$34 ; command vector reg
;****************************************************************************
; Addresses of Upstream DSP's Port B Host Interface Registers
;****************************************************************************
UpstrADDR equ $20000000 ; base address of upstr host port reg
UHICSR equ UpstrADDR+$20 ; Upstr host int control/status reg
URX equ UpstrADDR+$28 ; receive reg
RXDF equ 0 ; receiver data full bit 0 in
; interrupt control/status reg
TRDY equ 2 ; transmitter ready bit
; 2 in interrupt control/status reg
INIT equ 6 ; initialize bit 6 in the interrupt
; control/status reg
HMRC equ 15 ; host memory read command bit 15
; in interrupt control/status reg
HC equ 15 ; host command bit 15 in the command
; vector register
DE equ 31 ; DMA channel enable control bit
; 31 in DMA control/status reg
;****************************************************************************
; fast interrupt service routines
;****************************************************************************
org p:RESET ; reset isr
jmp MAIN
org p:DMA0 ; block DMA transfer finished
nop ; for test purposes, stop here when
nop ; done
;*****************************************************************************
; DMA setup for DMA transfers between DSP96000 master and DSP96000 slave
; (without semaphore control) using interrupts.
; configure system to include:
; 1)
; 2) all P,X,Y,I/O external acesses from port B with no wait states
; 3) except Y:$20000000-$3FFFFFFF which is upstream DSP's aHI
;*****************************************************************************
org p:MAIN
movep #$00030000,x:IPR ; DMA channel 0 int priority level = 2
movep #$0,x:BCRA ; no wait states for portb P,X,Y,I/O
movep #$0,x:BCRB ; ...don't care about page fault
movep #$00FFFDFF,x:PSR ; all external fetches will be from
; port B except Y:$20000000-3FFFFFFF
ori #$8,omr ; enable the internal data ROMs
andi #$CF,mr ; unmask all enabled interrupts
;*****************************************************************************
; The master verifies that the slave DMA channel 0 is free by reading
; the DMA channel 0 control/status register. This can be done using
; the X memory read procedure. If the DMA channel is dedicated to this
; transfer, this step may be bypassed.
;*****************************************************************************
wait1
jclr #TRDY,y:HICSR,wait1 ; wait for TX and HRX regs to clear
movep #DMA0CSR,y:XMR ; read contents of slave's
; ch 0 control/status reg
wait2
jset #HMRC,y:HICSR,wait2 ; wait for contents of slave's ch 0
; csr to be transferred to the RX reg
jset #DE,y:RX,wait1 ; continue to wait if slave's
; DMA ch 0 is enabled
;*****************************************************************************
; The master initializes the slave's DMA channel using Host Command
;*****************************************************************************
wait3
jset #HC,y:CVR,wait3 ; continue to wait if slave is
; processing a command vector
movep #$800E,y:CVR ; use the default host cmd. vector
; at location $1C, also set
; HC (host command) bit
wait4
jset #HC,y:CVR,wait4 ; continue to wait if slave is
; still processing DMA init
; command vector
; additional nops may be necessary
;*****************************************************************************
; The master initializes its own DMA channel.
; In this example, the contents of the 512 Y data ROM are transferred
; to the the slave address X:$1000-$13FF
;*****************************************************************************
movep #$400,x:DMA0SAR ; init DMA ch 0 source address reg to
; point to beginning of Y data ROM
movep #1,x:DMA0SOR ; init DMA ch 0 source offset reg to
; increment by 1 through ROM
movep #TX,x:DMA0DAR ; init DMA ch 0 dest address reg
; to point to slave's HI TX
movep #512,x:DMA0CR ; transfer all 512 words from the data
; ROM
movep #$C4000117,x:DMA0CSR ; enable DMA and DMA interrupt
; core and channel 0 have priority
; irqa is DMA request
; internal Y data is source
; external Y I/O is dest
;*****************************************************************************
; The master initializes the slave's host interface for DMA
;*****************************************************************************
movep #$1050,y:HICSR ; DMAE=1,INIT=1,TREQ=1
;*****************************************************************************
; main routine would go here
;*****************************************************************************
move #UHICSR,r4 ;load a pointer to the upstream HI
nop
_l1 jclr #RXDF,y:(r4),_l2 ;loop until Upstream guy has said
; something to us...
move y:URX,D0.l ;then save the word...
_l2 jmp _l1 ;and do it again...
end